package com.hspjava.String_;
/*
str参数的行为：

当调用ex.change(ex.str, ex.ch)时，传递的是ex.str引用地址的副本
在change()方法内str = "java"，只是让这个副本指向了新的字符串对象"java"
原成员变量ex.str仍然指向原始的"lfm"对象，因此最终输出仍是"lfm"
ch数组的行为：

传递的数组引用副本与原引用都指向同一个数组对象
通过ch[0] = 'h'直接修改了堆内存中的数组内容
这种修改会反映到所有指向该数组的引用上，因此输出变成[h,a,v,a]
关键区别：字符串的不可变性导致直接赋值会创建新对象，而数组操作修改的是堆内存中的原始数据。参数传递的机制使得字符串变量无法被重新绑定到新对象，但数组内容可以直接被修改。
 */
public class StringExercise10 {

    String str = new String("lfm");

    final char[] ch = {'j','a','v', 'a'};

    public void change(String str, char ch[]) {
        str = "java";
        ch[0] = 'h';

    }
    public static void main(String[] args) {
        StringExercise10 ex = new StringExercise10();
        ex.change(ex.str, ex.ch);
        System.out.println(ex.str + "and");
        System.out.println(ex.ch);


    }
}